Skip to content

单例模式(Singleton Pattern)

单例模式指保证一个类仅有一个实例,并提供一种访问该实例的全局方式。

场景

配置管理:维护一个单一的配置对象,以存储应用程序配置信息。

缓存管理:维护一个全局缓存,以存储经常使用的数据,以减少重复获取数据的开销。

实现

方式一

js
var Singleton = {
  fun1: function () {
    console.log("fun1");
  },
  fun2: function () {
    console.log("fun2");
  },
};

方式二

js
const Singleton = (function () {
  let instance;

  function createInstance() {
    // 这里可以初始化单例的数据和方法
    return {
      someProperty: "value",
      someMethod: function () {
        console.log("Some method");
      },
    };
  }

  return {
    getInstance: function () {
      if (!instance) {
        instance = createInstance();
      }
      return instance;
    },
  };
})();

// 使用单例
const instance1 = Singleton.getInstance();
const instance2 = Singleton.getInstance();

console.log(instance1 === instance2); // true,两个变量引用同一个实例

在上面的示例中,Singleton 是一个立即执行函数,它创建了一个闭包,并且只有一个变量 instance 用于存储单例的实例。getInstance 方法用于获取该实例,如果实例不存在,则会创建一个新实例,否则返回现有的实例。这确保了在应用程序中只有一个实例存在。

注意,上述示例是最基本的单例模式实现。在真实的应用中,你可能需要考虑线程安全性、惰性加载等其他因素来确保单例的有效性。

优点:

把代码都放在一个类里面维护,实现了高内聚 单例模式能保证全局的唯一性,可以减少命名变量 提供了对唯一实例的受控访问 单例模式在一定情况下可以节约内存,减少过多的类生成需要的内存和运行时间 避免对共享资源的多重占用 节约系统资源

缺点:

扩展性差 职责过重